package auth

import (
	m "admin/models/auth"
	"gorm.io/gorm"
)

type UserRoleInterface interface {
	AddRoleToUser(userID, roleID int64) error
	RemoveRoleFromUser(userID, roleID int64) error
	GetRolesByUser(userID int64) ([]m.Role, error)
}

type UserRoleRepo struct {
	db *gorm.DB
}

func NewUserRoleRepo(db *gorm.DB) *UserRoleRepo {
	return &UserRoleRepo{db: db}
}

// 给用户添加角色
func (r *UserRoleRepo) AddRoleToUser(userID, roleID int64) error {
	ur := m.UserRole{UserID: userID, RoleID: roleID}
	return r.db.Create(&ur).Error
}

// 移除用户的某个角色
func (r *UserRoleRepo) RemoveRoleFromUser(userID, roleID int64) error {
	return r.db.
		Where("user_id = ? AND role_id = ?", int64(userID), int64(roleID)).
		Delete(&m.UserRole{}).Error
}

// 查询用户的所有角色
func (r *UserRoleRepo) GetRolesByUser(userID int64) ([]m.Role, error) {
	var roles []m.Role
	err := r.db.
		Table("roles r").
		Joins("JOIN user_role ur ON ur.role_id = r.id").
		Where("ur.user_id = ?", int64(userID)).
		Find(&roles).Error
	return roles, err
}
